//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<stdbool.h>
//
//struct ListNode {
//    int val;
//    struct ListNode* next;
//};
//
//
//typedef struct ListNode ListNode;
//struct ListNode* reverseList(struct ListNode* head) {
//    if (head == NULL)
//        return NULL;
//    ListNode* prev = NULL;
//    ListNode* cur = head;
//    ListNode* next = head->next;
//    while (cur)
//    {
//        cur->next = prev;
//        prev = cur;
//        cur = next;
//        if (next)
//            next = next->next;
//    }
//    return prev;
//}
//
//
//bool isPalindrome(struct ListNode* head) {
//    if (!head || !head->next)
//        return true;
//    ListNode* slow = head;
//    ListNode* fast = head;
//    while (fast && fast->next)
//    {
//        fast = fast->next->next;
//        slow = slow->next;
//    }
//    ListNode* l1 = head;
//    ListNode* l2 = reverseList(slow);
//    while (l2)
//    {
//        if (l1->val != l2->val)
//            return false;
//        l1 = l1->next;
//        l2 = l2->next;
//    }
//    return true;
//}
//
//ListNode* BuyNode(int x)
//{
//    ListNode* new = (ListNode*)malloc(sizeof(int));
//    if (new == NULL)
//    {
//        perror("malloc fail");
//
//        exit(1);
//    }
//    new->val = x;
//    return new;
//}
//
//int main()
//{
//    ListNode* n1 = BuyNode(1);
//    ListNode* n2 = BuyNode(2);
//    ListNode* n3 = BuyNode(1);
//
//    n1->next = n2;
//    n2->next = n3;
//    n3->next = NULL;
//    ListNode* cur = n1;
//    if (isPalindrome(n1))
//        printf("true");
//    else
//        printf("false");
//    return 0;
//}